//引入express模块
const express = require('express')
//path模块是node.js中处理路径的核心模块。可以很方便的处理关于文件路径的问题。
const path = require('path')

//创建应用对象
const app = express()


//处理body请求体的中间件
app.use(express.urlencoded())       //处理form表单格式
app.use(express.json())      //处理json字符串格式

//手动处理body请求的中间件
//是中间件可以接收任何请求
/* app.use((req,res,next)=>{
    let dataStr=''
    req.on('data',(chunk)=>{
        // console.log(chunk.toString());  //name=nih&age=nn  这个是查询字符串格式(对于后端来说是form表单格式)
        dataStr+=chunk.toString()
    })
    req.on('end',()=>{
        //方法1
        // const o={}
        // // console.log(dataStr);
        // //以&来截取,得到一个数组
        // dataStr.split('&')  //['name=nn','age=11']
        // dataStr.split('&').forEach(item=>{
        //     const [key,value]=item.split('=')//['name','nn']
        //     o[key]=value
        // })
        // console.log(o);

        //方法2
        //累加 万物皆可reducs
        //reducs的回调函数中的第一个值是上一次的返回值或者初始值,第二个值是当前的值(相当于item)
        const data= dataStr.split('&').reduce((prev,current)=>{
            const [key,value]=current.split('=');
            prev[key]=value
            return prev
        },{})
        console.log(data,'data');   //{ name: 'nih', age: 'nn' } data
        //在中间件中,得到请求体body的值并处理为一个对象  添加给req的body属性上
        req.body=data

        next()
    })
    
    
}) */


//查询学生信息接口  query传参
app.get('/user', (req, res) => {
    const {
        userId
    } = req.query //{ wd: 'wuhan', tel: '123456' }   这个是解构赋值选择对象身上的userId属性
    // console.log(res.query);

    //查询失败 响应
    if (userId !== '001') {
        //return作用  先执行return后面的语句 然后退出函数
        return res.send({
            code: 10001,
            msg: '查失败',
            data: null
        })
    }

    //查询成功 响应
    res.send({
        code: 10000,
        msg: '查询成功',
        data: {
            name: 'zhang',
            age: 18,
            sex: '男'
        }
    })

})

//查询接口  path传参
app.get('/userInfo/:userId',(req,res)=>{
    // console.log(req.params);        
    const {
        userId
    } = req.params      //{ userId: '001' }

     //查询失败 响应
     if (userId !== '001') {
        //return作用  先执行return后面的语句 然后退出函数
        return res.send({
            code: 10001,
            msg: '查失败',
            data: null
        })
    }

    //查询成功 响应
    res.send({
        code: 10000,
        msg: '查询成功',
        data: {
            name: 'zhang',
            age: 18,
            sex: '男'
        }
    })
})

app.post('/adduser',(req,res)=>{
    // console.log('adduser');
    // console.log(req.body);
    const {
        name,
        age,
        sex
    }=req.body
    if(!name || !age || !sex){
        return res.send({
            code:10001,
            mes:'添加失败',
            data:null
        })
    }
    res.send({
        code:10000,
        mes:'添加成功',
        data:null
    })
})

//搭建路由  静态资源布署接口
app.get('/1', (req, res) => {

    //resolve() 返回绝对路径
    const filepath = path.resolve(__dirname, './1.ajax方法.html')

    //做出响应
    res.sendFile(filepath)

})
app.get('/2', (req, res) => {

    //resolve() 返回绝对路径
    const filepath = path.resolve(__dirname, './2.ajax的二级封装.html')

    //做出响应
    res.sendFile(filepath)

})
app.get('/3', (req, res) => {

    //resolve() 返回绝对路径
    const filepath = path.resolve(__dirname, './3.ajax的三级封装.html')

    //做出响应
    res.sendFile(filepath)

})
app.get('/4', (req, res) => {

    //resolve() 返回绝对路径
    const filepath = path.resolve(__dirname, './4.post请求.html')

    //做出响应
    res.sendFile(filepath)

})


//设置端口
app.listen(8080, () => {
    console.log('服务器启动成功');
})